home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / SubHunter 249038182001.psc / Module1.bas < prev    next >
Encoding:
BASIC Source File  |  2001-08-16  |  14.2 KB  |  549 lines

  1. Attribute VB_Name = "Module1"
  2. Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
  3. Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
  4. Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXPos As Long, ByVal nYPos As Long) As Long
  5. Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
  6. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  7. Public Const SRCAND = &H8800C6
  8. Public Const SRCPAINT = &HEE0086
  9. Public Const SRCCOPY = &HCC0020
  10.  
  11.  
  12.  
  13. Public Type Coor
  14.  X As Integer
  15.  Y As Integer
  16.  Act As Boolean
  17.  Tag As Integer
  18. End Type
  19.  
  20. Public Type Player
  21.  X As Integer
  22.  Y As Integer
  23.  Ammo As Integer
  24.  Dire As Byte
  25.  Health As Integer
  26.  Score As Long
  27.  Speed As Currency
  28.  Firetime As Currency
  29. End Type
  30.  
  31. Public Type SubMarine
  32.  X As Integer
  33.  Y As Integer
  34.  Act As Boolean
  35.  Score As Integer
  36.  Dire As Integer
  37.  Speed As Integer
  38.  Damaged As Integer
  39. End Type
  40.  
  41. Public Type DropBombs
  42.  X As Integer
  43.  Y As Integer
  44.  Act As Boolean
  45.  Speed As Currency
  46. End Type
  47.  
  48. Public Type Bomber
  49.  X As Integer
  50.  Y As Integer
  51.  Act As Boolean
  52.  Dire As Integer
  53.  Speed As Integer
  54.  BombLoad As Integer
  55.  Droped As Boolean
  56. End Type
  57.  
  58. Public Type HighScore
  59.  PlName As String
  60.  plScore As Long
  61.  plDate As String
  62. End Type
  63.  
  64.  
  65. Public Const Bredde As Integer = 400
  66. Public Const Hoyde As Integer = 360
  67. Public Const ShipBredde = 53
  68. Public Const ShipHoyde = 14
  69. Public Const SubBredde = 36
  70. Public Const SubHoyde = 10
  71. Public Const PlaneBredde = 29
  72. Public Const PlaneHoyde = 12
  73. Public Const MaxAmmo = 7
  74. Public P1 As Player
  75. Public Shot(1 To 30) As Coor
  76. Public Subs(1 To 30) As SubMarine
  77. Public HighS(1 To 10) As HighScore
  78. Public Planes(1 To 10) As Bomber
  79. Public Bombs(1 To 30) As DropBombs
  80. Public Explo(1 To 10) As Coor
  81. Public TheKing As Coor
  82. Public NumPlanes As Integer
  83. Public NumSubs As Integer
  84. Public NumShots As Integer
  85. Public NumBombs As Integer
  86. Public DontClose As Boolean
  87. Public MainPause As Boolean
  88.  
  89.  
  90. Public Function PlaySound(File As String)
  91. Const SND_SYNC = &H0
  92. Const SND_ASYNC = &H1
  93. Const SND_NODEFAULT = &H2
  94. Const SND_LOOP = &H8
  95. Const SND_NOSTOP = &H10
  96.     wFlags% = SND_ASYNC Or SND_NODEFAULT
  97.     Svar = sndPlaySound(App.Path & "\" & File & ".wav", wFlags%) 'Send the sound to the big world
  98. End Function
  99.  
  100. Public Sub Fire()
  101. Dim A As Integer
  102.     
  103.     If (GetTickCount - P1.Firetime) < 300 Then Exit Sub
  104.     If P1.Ammo = 0 Then Exit Sub
  105.     If NumShots = 30 Then Exit Sub
  106.     
  107.     P1.Firetime = GetTickCount
  108.     P1.Ammo = P1.Ammo - 1
  109.     NumShots = NumShots + 1
  110.     
  111.     
  112.     A = 1
  113.     Do Until Not Shot(A).Act
  114.         A = A + 1
  115.     Loop
  116.     
  117.     With Shot(A)
  118.         .Act = True
  119.         .Y = P1.Y + ShipHoyde
  120.         .X = P1.X + (ShipBredde / 2)
  121.     End With
  122. End Sub
  123.  
  124. Public Sub MakeSub()
  125. Dim A As Integer
  126.     If NumSubs = 30 Then Exit Sub
  127.     
  128.     Randomize
  129.     temp = (Rnd * 130)
  130.     If temp < 2 + 30 - NumSubs Then
  131.     
  132.         NumSubs = NumSubs + 1
  133.         
  134.         A = 1
  135.         Do Until Not Subs(A).Act Or A = 30
  136.             A = A + 1
  137.         Loop
  138.         With Subs(A)
  139.         
  140.         .Act = True
  141.         
  142.         If Int((Rnd * 2) + 1) = 1 Then
  143.             .X = 0 - SubBredde - 2
  144.             .Dire = 2
  145.         Else
  146.             .X = Bredde + 2
  147.             .Dire = 1
  148.         End If
  149.         
  150.         .Y = Int((Rnd * 200) + 130)
  151.         Randomize
  152.         temp = Int((Rnd * 100) + 1)
  153.         Select Case temp
  154.         Case 80 To 100
  155.             .Speed = 3
  156.         Case 50 To 80
  157.             .Speed = 2
  158.         Case Else
  159.             .Speed = 1
  160.         End Select
  161.         
  162.         
  163.         .Score = (.Speed * 2) * (.Y / 10)
  164.         
  165.         End With
  166.     End If
  167. End Sub
  168. Public Sub Movesubs()
  169.     For A = 1 To 30
  170.     With Subs(A)
  171.         If .Act Then
  172.         
  173.         If .Dire = 2 Then M = .Speed
  174.         If .Dire = 1 Then M = -1 * .Speed
  175.         
  176.         If .Damaged <> 0 Then
  177.             .Damaged = .Damaged + 1
  178.             .Y = .Y + 3
  179.             If .Damaged = 10 Then
  180.                 .Damaged = 0
  181.                 .X = 0
  182.                 .Y = 0
  183.                 .Dire = 0
  184.                 .Act = False
  185.             End If
  186.         Else
  187.         .X = .X + M
  188.         End If
  189.         'Nσ kanten
  190.         If .X < 0 - SubBredde - 2 Or .X > Bredde + 2 Then
  191.             .Act = False
  192.             .Dire = 0
  193.             .Score = 0
  194.             .Speed = 0
  195.             .Damaged = 0
  196.             .X = 0
  197.             .Y = 0
  198.             NumSubs = NumSubs - 1
  199.         End If
  200.                     
  201.         End If
  202.     End With
  203.     Next A
  204. End Sub
  205. Public Sub MovePlanes()
  206.     For A = 1 To 10
  207.     With Planes(A)
  208.         If .Act Then
  209.         
  210.         If .Dire = 2 Then M = .Speed
  211.         If .Dire = 1 Then M = -1 * .Speed
  212.         
  213.         .X = .X + M
  214.         
  215.         'Nσ kanten
  216.         If .X < 0 - PlaneBredde - 2 Or .X > Bredde + 2 Then
  217.             .Act = False
  218.             .Dire = 0
  219.             .Speed = 0
  220.             .Droped = False
  221.             .X = 0
  222.             .Y = 0
  223.             .BombLoad = 0
  224.             NumPlanes = NumPlanes - 1
  225.         End If
  226.                     
  227.         End If
  228.     End With
  229.     Next A
  230. End Sub
  231. Public Sub MoveShots()
  232.     For A = 1 To 30
  233.         With Shot(A)
  234.         If .Act Then
  235.             .Y = .Y + 1.8
  236.             
  237.             'Treffe en Sub
  238.             HitSubCheck (A)
  239.             
  240.             If .Y >= Hoyde Then 'Nσ bunn
  241.                 .Act = False
  242.                 .X = 0
  243.                 .Y = 0
  244.                 NumShots = NumShots - 1
  245.             End If
  246.         End If
  247.         End With
  248.         
  249.         
  250.         With Bombs(A)
  251.         If .Act Then
  252.             .Speed = .Speed - (.Speed * 0.1)
  253.             .X = .X + .Speed
  254.             .Y = .Y + 2
  255.             
  256.             HitShipCheck (A)
  257.             
  258.             If .Y >= 117 Then 'Nσ Vannflaten
  259.                 .Act = False
  260.                 .X = 0
  261.                 .Y = 0
  262.                 .Speed = 0
  263.                 NumBombs = NumBombs - 1
  264.             End If
  265.             
  266.         End If
  267.         End With
  268.     Next A
  269.     'The King
  270.     If TheKing.Act Then
  271.         TheKing.X = TheKing.X - 1
  272.         If TheKing.X <= -24 Then 'Deeactivate
  273.             PlaySound "elvis"
  274.             TheKing.Act = False
  275.             TheKing.X = 0
  276.             TheKing.Y = 0
  277.             TheKing.Tag = 0
  278.         End If
  279.         If TheKing.Tag = 0 Then
  280.             TheKing.Tag = 2
  281.         Else: TheKing.Tag = TheKing.Tag - 1
  282.         End If
  283.         
  284.         If Rnd > 0.98 Then PlaySound "elvis2"
  285.     End If
  286. End Sub
  287.  
  288. Public Sub HitSubCheck(M)
  289. Dim Svar(1 To 4)
  290.     
  291.     Svar(1) = GetPixel(Form1.Pic2.hdc, Shot(M).X, Shot(M).Y)
  292.     Svar(2) = GetPixel(Form1.Pic2.hdc, Shot(M).X + 6, Shot(M).Y)
  293.     Svar(3) = GetPixel(Form1.Pic2.hdc, Shot(M).X + 6, Shot(M).Y + 6)
  294.     Svar(4) = GetPixel(Form1.Pic2.hdc, Shot(M).X, Shot(M).Y + 6)
  295.     For A = 1 To 4
  296.         If Svar(A) <> vbWhite And Not Svar(A) = -1 Then
  297.             For s = 1 To 30
  298.                 Select Case A
  299.                 Case 1
  300.                     If Subs(s).X <= Shot(M).X And Subs(s).X + SubBredde >= Shot(M).X Then
  301.                         If Shot(M).Y >= Subs(s).Y And Shot(M).Y <= Subs(s).Y + SubHoyde Then
  302.                             Killsub (s)
  303.                         End If
  304.                     End If
  305.                 Case 2
  306.                     If Subs(s).X <= Shot(M).X + 6 And Subs(s).X + SubBredde >= Shot(M).X + 6 Then
  307.                         If Shot(M).Y >= Subs(s).Y And Shot(M).Y <= Subs(s).Y + SubHoyde Then
  308.                             Killsub (s)
  309.                         End If
  310.                     End If
  311.                 Case 3
  312.                     If Subs(s).X <= Shot(M).X + 6 And Subs(s).X + SubBredde >= Shot(M).X + 6 Then
  313.                         If Shot(M).Y + 6 >= Subs(s).Y And Shot(M).Y + 6 <= Subs(s).Y + SubHoyde Then
  314.                             Killsub (s)
  315.                         End If
  316.                     End If
  317.                 Case 4
  318.                     If Subs(s).X <= Shot(M).X And Subs(s).X + SubBredde >= Shot(M).X Then
  319.                         If Shot(M).Y + 6 >= Subs(s).Y And Shot(M).Y + 6 <= Subs(s).Y + SubHoyde Then
  320.                             Killsub (s)
  321.                         End If
  322.                     End If
  323.                 End Select
  324.             Next s
  325.             If Shot(M).Act Then MakeExplo Shot(M).X, Shot(M).Y
  326.             Shot(M).Act = 0
  327.             Shot(M).X = 0
  328.             Shot(M).Y = 0
  329.             NumShots = NumShots - 1
  330.         End If
  331.     Next A
  332.     
  333. End Sub
  334.  
  335. Public Sub HitShipCheck(M)
  336. Dim Svar
  337.     
  338.     Svar = GetPixel(Form1.Pic2.hdc, Bombs(M).X, Bombs(M).Y)
  339.     
  340.     If Svar <> vbWhite Then
  341.         P1.Health = P1.Health - 1
  342.         With Bombs(M)
  343.         .Act = False
  344.         .Speed = 0
  345.         .X = 0
  346.         .Y = 0
  347.         End With
  348.         PlaySound "hit" 'play the sound
  349.         If P1.Health <= 0 Then
  350.             MainPause = True
  351.             P1.Health = 0
  352.             MsgBox "Game Over", vbOKOnly, Form1.Caption
  353.             Form1.PicExit_Click
  354.         End If
  355.     End If
  356. End Sub
  357. Public Sub Killsub(A)
  358.     P1.Score = P1.Score + Subs(A).Score
  359.     With Subs(A)
  360.         If Not .Act Then Exit Sub
  361.         .Score = 0
  362.         .Speed = 0
  363.         .Damaged = 1
  364.     End With
  365.     NumSubs = NumSubs - 1
  366. End Sub
  367.  
  368. Public Sub LoadScore()
  369.     Open App.Path & "\data.dat" For Random As #1 Len = 18
  370.     For A = 3 To 30 Step 3
  371.         Get #1, A - 2, HighS(A / 3).PlName
  372.         Get #1, A - 1, HighS(A / 3).plScore
  373.         Get #1, A, HighS(A / 3).plDate
  374.     Next A
  375.     Close #1
  376. End Sub
  377.  
  378. Public Sub SaveScore()
  379.     On Error Resume Next
  380.     Kill App.Path & "\data.dat"
  381.     Open App.Path & "\data.dat" For Random As #1 Len = 18
  382.     For A = 3 To 30 Step 3
  383.         Put #1, A - 2, HighS(A / 3).PlName
  384.         Put #1, A - 1, HighS(A / 3).plScore
  385.         Put #1, A, HighS(A / 3).plDate
  386.     Next A
  387.     Close #1
  388. End Sub
  389. Public Sub CheckKing()
  390.     If P1.X = 0 And GetAsyncKeyState(vbKeyE) And TheKing.Act = False Then
  391.         'Activate him
  392.         PlaySound "elvis2"
  393.         TheKing.Act = True
  394.         TheKing.Tag = 0
  395.         TheKing.X = Bredde + 1
  396.         TheKing.Y = Int((Rnd * 150) + 130)
  397.     End If
  398. End Sub
  399. Public Sub UpdateScore()
  400. Dim MyName As String
  401. Dim Score As Long
  402.     Score = P1.Score
  403.     
  404.     If Score = 0 Then Exit Sub
  405.     
  406.     For A = 1 To 10
  407.         If Score > HighS(A).plScore Then GoTo FantEn
  408.     Next A
  409.     ' No highscore, exit sub
  410.     Exit Sub
  411. FantEn:
  412.     
  413.     'Wanna save?
  414.     Svar = MsgBox("Congratulations! " & P1.Score & " points is a new highscore!" & vbNewLine & "Do you want to write it down?", vbYesNo, "New HighScore: " & A & ". place!")
  415.     If Svar = vbNo Then Exit Sub
  416.     
  417.     'Move previous scores down
  418.     For b = 10 To A + 1 Step -1
  419.         HighS(b).plDate = HighS(b - 1).plDate
  420.         HighS(b).PlName = HighS(b - 1).PlName
  421.         HighS(b).plScore = HighS(b - 1).plScore
  422.     Next b
  423.  
  424. NewName:
  425.     MyName = InputBox("Please input your name (Max 16 characters)", "New HighScore: " & A & ". place!")
  426.     If Len(MyName) > 16 Then GoTo NewName
  427.     If Len(MyName) = 0 Then GoTo NewName
  428.     
  429.     HighS(A).plDate = Date
  430.     HighS(A).PlName = MyName
  431.     HighS(A).plScore = P1.Score
  432.     frmHigh.Show , Form1
  433.     DontClose = True
  434. End Sub
  435.  
  436. Public Sub MakePlane()
  437.     If NumPlanes = 10 Then Exit Sub
  438.     
  439.     Randomize
  440.     temp = (Rnd * 130)
  441.     If temp < 20 Then
  442.     
  443.         NumPlanes = NumPlanes + 1
  444.         
  445.         A = 1
  446.         Do Until Not Planes(A).Act Or A = 10
  447.             A = A + 1
  448.         Loop
  449.         With Planes(A)
  450.         
  451.         .Act = True
  452.         
  453.         If Int((Rnd * 2) + 1) = 1 Then
  454.             .X = 0 - PlaneBredde - 2
  455.             .Dire = 2
  456.         Else
  457.             .X = Bredde + 2
  458.             .Dire = 1
  459.         End If
  460.         
  461.         .Y = Int((Rnd * 35) + 5)
  462.         
  463.         .Droped = False
  464.         .Speed = 4
  465.         
  466.         End With
  467.     End If
  468. End Sub
  469.  
  470. Public Sub DropBombs()
  471. Dim PL As Integer
  472.     For PL = 1 To 10
  473.         If Planes(PL).BombLoad > 0 Then GoTo AllClear
  474.         
  475.         If Planes(PL).Act And Not Planes(PL).Droped Then
  476.             
  477.             'Se om jeg skal slippe bombene
  478.             If Planes(PL).X < P1.X + ShipBredde And Planes(PL).X > P1.X Then
  479.                 
  480.                 If Planes(PL).BombLoad = 0 Then
  481.                     Randomize
  482.                     Planes(PL).BombLoad = Int((Rnd * 7) + 3)
  483.                     Planes(PL).Droped = True
  484.                 End If
  485. AllClear:
  486.                 
  487.                 If NumBombs = 30 Then Exit Sub
  488.  
  489.                 NumBombs = NumBombs + 1
  490.                 Planes(PL).BombLoad = Planes(PL).BombLoad - 1
  491.                 
  492.                 A = 1
  493.                 Do Until Not Bombs(A).Act Or A = 30
  494.                     A = A + 1
  495.                 Loop
  496.                 
  497.                 With Bombs(A)
  498.                 .Act = True
  499.                 
  500.                 If Planes(PL).Dire = 1 Then
  501.                     .Speed = Planes(PL).Speed * -1
  502.                 Else
  503.                     .Speed = Planes(PL).Speed
  504.                 End If
  505.                 
  506.                 Select Case Planes(PL).Dire
  507.                 Case 1: .X = Planes(PL).X + 20
  508.                 Case 2: .X = Planes(PL).X + 4
  509.                 End Select
  510.                 
  511.                 .Y = Planes(PL).Y + 14
  512.                 
  513.                 End With
  514.             End If
  515.         End If
  516.     Next PL
  517. End Sub
  518.  
  519. Sub MakeExplo(X, Y)
  520.     'play a sound
  521.     PlaySound "explo"
  522.     X = X - 30
  523.     Y = Y - 25
  524.     A = 1
  525.     Do Until Not Explo(A).Act Or A = UBound(Explo)
  526.         A = A + 1
  527.     Loop
  528.     With Explo(A)
  529.         .X = X
  530.         .Y = Y
  531.         .Tag = 0
  532.         .Act = True
  533.     End With
  534. End Sub
  535. Public Sub DoExplo()
  536.     For A = 1 To UBound(Explo)
  537.         If Explo(A).Act Then
  538.             If Explo(A).Tag < 11 Then
  539.                 Explo(A).Tag = Explo(A).Tag + 1
  540.             Else
  541.                 Explo(A).Act = False
  542.                 Explo(A).X = 0
  543.                 Explo(A).Y = 0
  544.                 Explo(A).Tag = 0
  545.             End If
  546.         End If
  547.     Next A
  548. End Sub
  549.